package com.itheima.service.mongo.impl;

import cn.hutool.core.collection.CollectionUtil;
import com.itheima.domain.mongo.Friend;
import com.itheima.domain.mongo.RecommendUser;
import com.itheima.domain.mongo.UserLike;

import com.itheima.domain.mongo.Visitor;
import com.itheima.service.db.CardService;
import com.itheima.vo.OMGVO;
import com.itheima.vo.PageBeanVo;
import com.mongodb.client.result.DeleteResult;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;

import java.util.ArrayList;
import java.util.List;

@DubboService
public class CardServiceImple implements CardService {
    @Autowired
    private MongoTemplate mongoTemplate;

    @Override
    public List<RecommendUser> findrecommendUser(Long userId) {
        //查询信息
        return mongoTemplate.find(new Query(Criteria.where("toUserId").is(userId)), RecommendUser.class);


    }
    //右滑喜欢
    @Override
    public void rightLove(Long userId, Integer likeUsrId) {

        //喜欢  就推荐的用户删除
        Query query = new Query(Criteria.where("toUserId").is(userId.longValue()).and("userId").is(likeUsrId.longValue()));
        //删除推荐的用户
        DeleteResult remove = mongoTemplate.remove(query, RecommendUser.class);


        //添加到 user like表中
        UserLike userLike = new UserLike();
        userLike.setUserId(userId);
        userLike.setLikeUserId(likeUsrId.longValue());
        userLike.setCreated(System.currentTimeMillis());
        mongoTemplate.save(userLike);
        //查询 我喜欢的用户有没有喜欢我 喜欢的话 就添加到朋友表中
        Query query1 = new Query(Criteria.where("userId").is(likeUsrId));
        List<UserLike> userLikes = mongoTemplate.find(query1, UserLike.class);
        //遍历
        for (UserLike userlike : userLikes) {
            if (userlike.getLikeUserId() == userId) {
                //如果有
                //自动成为好友
                Friend myfriend = new Friend();
                myfriend.setUserId(userId);
                myfriend.setFriendId(likeUsrId.longValue());
                myfriend.setCreated(System.currentTimeMillis());
                mongoTemplate.save(myfriend);

                //如果有
                Friend friend = new Friend();
                friend.setUserId(likeUsrId.longValue());
                friend.setFriendId(userId);
                friend.setCreated(System.currentTimeMillis());
                mongoTemplate.save(friend);

            }
        }

    }
    //左滑不喜欢
    @Override
    public void leftLove(Long touserId, Integer userid) {
        //不喜欢就推荐列表中删除
        mongoTemplate.remove(new Query(Criteria.where("userId").is(userid.longValue()).and("toUserId").is(touserId.longValue())), RecommendUser.class);


    }
    //查询我喜欢的人
    @Override
    public OMGVO findlike(Long userId) {
        //构建条件  我喜欢的人
        Query query = new Query(Criteria.where("userId").is(userId));
        Long count = mongoTemplate.count(query, UserLike.class);
        System.out.println(count);

        //查询 喜欢我的人
        Query query1 = new Query(Criteria.where("likeUserId").is(userId));
        Long count1 = mongoTemplate.count(query1, UserLike.class);
        System.out.println(count1);

        Integer huxinag=0;
        //查询互相喜欢的人
        //先查询我喜欢的人 是谁 在查询 喜欢我的人是 谁
        List<UserLike> userLikes = mongoTemplate.find(query, UserLike.class);
        for (UserLike userLike : userLikes) {
            //查询出来的是我喜欢的人

            //通过查询我喜欢的人   他喜欢的人不
            Query query2 = new Query(Criteria.where("userId").is(userLike.getLikeUserId()));
            List<UserLike> userLikes1 = mongoTemplate.find(query2, UserLike.class);
            for (UserLike like : userLikes1) {
                if (like.getLikeUserId() == userId) {
                    System.out.println("11111");
                    huxinag=huxinag + 1;
                }
            }
        }
        OMGVO omgvo = new OMGVO();
        omgvo.setEachLoveCount(huxinag);
        omgvo.setFanCount(count1.intValue());
        omgvo.setLoveCount(count.intValue());
        return omgvo;


    }
    public List<Long> huxiang(Long userId) {
        //互相关注的人
        //先查询 出来我喜欢的  在我喜欢的 中查询 我喜欢的人的喜欢里面有没有我
        //声明集合
        ArrayList<Long> huxiang = new ArrayList<>();
        // 1 查询我喜欢的人
        Query query = new Query(Criteria.where("userId").is(userId)).with(Sort.by(Sort.Order.desc("created")));
        List<UserLike> userLikes = mongoTemplate.find(query, UserLike.class);
        // 在看我喜欢的人当中有没有我
        if (CollectionUtil.isNotEmpty(userLikes)) {
            for (UserLike userLike : userLikes) {
                //查看我喜欢的人
                Query query1 = new Query(Criteria.where("userId").is(userLike.getLikeUserId()));
                List<UserLike> userLikes1 = mongoTemplate.find(query1, UserLike.class);
                if (CollectionUtil.isNotEmpty(userLikes1)) {
                    for (UserLike like : userLikes1) {
                        if (like.getLikeUserId() == userId) {
                            //查询like中的userid
                            huxiang.add(like.getUserId());
                        }


                    }

                }

            }

        }

        return huxiang;

    }


    //// 喜欢 粉丝 互相喜欢  访客 的人
    @Override
    public PageBeanVo findlovelikefenUserInfo(Integer pageNumber, Integer pageSize, Integer type, Long userId) {

        switch (type) {
            case 1 :{
                //互相关注的人
                //先查询 出来我喜欢的  在我喜欢的 中查询 我喜欢的人的喜欢里面有没有我
                //声明集合
                ArrayList<Long> mylove = new ArrayList<>();
                // 1 查询我喜欢的人
                Query query = new Query(Criteria.where("userId").is(userId)).with(Sort.by(Sort.Order.desc("created")));
                List<UserLike> userLikes = mongoTemplate.find(query, UserLike.class);
                // 在看我喜欢的人当中有没有我
                if (CollectionUtil.isNotEmpty(userLikes)) {
                    for (UserLike userLike : userLikes) {
                        //查看我喜欢的人
                        Query query1 = new Query(Criteria.where("userId").is(userLike.getLikeUserId()));
                        List<UserLike> userLikes1 = mongoTemplate.find(query1, UserLike.class);
                        if (CollectionUtil.isNotEmpty(userLikes1)) {
                            for (UserLike like : userLikes1) {
                                if (like.getLikeUserId() == userId) {
                                    //查询like中的userid
                                    mylove.add(like.getUserId());
                                }


                            }

                        }

                    }

                }

                return new PageBeanVo(pageNumber, pageSize, Long.valueOf(mylove.size()), mylove);

            }
            case 2:{
                //我关注的人
                // 1.构建条件查询我 喜欢的人
                Query query = new Query(Criteria.where("userId").is(userId)).skip((pageNumber - 1) * pageSize).limit(pageSize).with(Sort.by(Sort.Order.desc("created")));
                //2 查询出来我喜欢的人
                List<UserLike> userLikes = mongoTemplate.find(query, UserLike.class);
                // 3声明集合
                ArrayList<Long> mylove = new ArrayList<>();
                // 3遍历
                for (UserLike userLike : userLikes) {

                    //封装我喜欢的人
                    mylove.add(userLike.getLikeUserId());
                }
                //个数
                long count = mongoTemplate.count(new Query(Criteria.where("userId").is(userId)), UserLike.class);
                return new PageBeanVo(pageNumber, pageSize, count, mylove);
            }
            case 3:{


                //粉丝

                //关注我的人
                // 1. 喜欢的人
                Query query = new Query(Criteria.where("likeUserId").is(userId)).skip((pageNumber - 1) * pageSize).limit(pageSize).with(Sort.by(Sort.Order.desc("created")));
                //2 查询出来喜欢我的人
                List<UserLike> userLikes = mongoTemplate.find(query, UserLike.class);
                // 3声明集合
                ArrayList<Long> mylove = new ArrayList<>();
                // 3遍历

                for (UserLike userLike : userLikes) {

                    //喜欢的人
                    mylove.add(userLike.getUserId());
                }
                //个数
                long count = mongoTemplate.count(new Query(Criteria.where("likeUserId").is(userId)), UserLike.class);
                return new PageBeanVo(pageNumber, pageSize, count, mylove);

            }
            case 4:
                PageBeanVo pageBeanVo = new PageBeanVo();
                //查询 谁看过我
                Query query = new Query(Criteria.where("userId").is(userId)).skip((pageNumber - 1) * pageSize).limit(pageSize);
                //获取访客信息
                List<Visitor> visitorList = mongoTemplate.find(query, Visitor.class);
                //声明集合
                List<Long> list = new ArrayList<>();
                List<Double> sorelist = new ArrayList<>();
                //封装
                if (CollectionUtil.isNotEmpty(visitorList)) {
                    for (Visitor visitor : visitorList) {
                        Long visitorUserId = visitor.getVisitorUserId();
                        list.add(visitorUserId );
                        sorelist.add(visitor.getScore());
                    }

                }

                long count = mongoTemplate.count(new Query(Criteria.where("userId").is(userId)), Visitor.class);
                pageBeanVo.setSore(sorelist);
                pageBeanVo.setItems(list);
                pageBeanVo.setCounts(count);
                pageBeanVo.setPage(pageNumber);
                pageBeanVo.setPagesize(pageSize);
                return pageBeanVo;

        }

        return null;

    }



    //喜欢的人
    @Override
    public void findLove(Long likeid, Long uid) {
        //封装
        UserLike userLike = new UserLike();

        userLike.setUserId(uid);
        userLike.setLikeUserId(likeid);
        userLike.setCreated(System.currentTimeMillis());

        mongoTemplate.save(userLike);
        //----------------------------相互喜欢的成为好友
        //-------------------查询 喜欢的人 有没有喜欢我 系缓缓了的话就 建立好友关系
        UserLike userLike1 = mongoTemplate.findOne(new Query(Criteria.where("userId").is(likeid).and("likeUserId").is(uid)), UserLike.class);
        if (userLike1 != null) {
            //如果有
            //自动成为好友
            Friend myfriend = new Friend();
            myfriend.setUserId(uid);
            myfriend.setFriendId(likeid.longValue());
            myfriend.setCreated(System.currentTimeMillis());
            mongoTemplate.save(myfriend);

            //如果有
            Friend friend = new Friend();
            friend.setUserId(likeid.longValue());
            friend.setFriendId(uid);
            friend.setCreated(System.currentTimeMillis());
            mongoTemplate.save(friend);

        }
    }


    //取消喜欢
    @Override
    public void deleteLove(Long userId, Long likeId) {
        Query query = new Query(Criteria.where("userId").is(userId).and("likeUserId").is(likeId));

        mongoTemplate.remove(query, UserLike.class);
    //--------------------------------- 那么好友的关系也要删除
        Query query1 = new Query(Criteria.where("userId").is(userId).and("friendId").is(likeId));
        Query query2 = new Query(Criteria.where("userId").is(likeId).and("friendId").is(userId));
        mongoTemplate.remove(query1, Friend.class);
        mongoTemplate.remove(query2, Friend.class);


    }
}
